{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "58c4ab39-c4e1-416c-be04-c275cf6aa83a",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "dotenv:  E:\\work\\code\\ai\\.env\n"
     ]
    }
   ],
   "source": [
    "import os\n",
    "from openai import OpenAI\n",
    "from dotenv import load_dotenv, find_dotenv\n",
    "\n",
    "def get_openai_key():\n",
    "    print(\"dotenv: \",find_dotenv())\n",
    "    _ = load_dotenv(find_dotenv())\n",
    "    # api_key = os.environ['OPENAI_API_KEY']\n",
    "    return OpenAI(\n",
    "        api_key = os.environ.get(\"ARK_API_KEY\"),\n",
    "    base_url = \"https://ark.cn-beijing.volces.com/api/v3\",)\n",
    "\n",
    "client = get_openai_key()\n",
    "\n",
    "def get_completion_from_messages(message, model=\"ep-20250103110319-28xth\",temperature = 0, max_tokens=500):\n",
    "    # message = [\n",
    "    #     {\"role\": \"user\", \"content\": prompt},\n",
    "    # ]\n",
    "    completion = client.chat.completions.create( \n",
    "    model = model,  # your model endpoint ID\n",
    "    messages =message,\n",
    "    temperature=temperature,\n",
    "    max_tokens=max_tokens\n",
    "    )\n",
    "    return completion.choices[0].message.content"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "3be00009-309b-4880-b256-9bb4d2b843ff",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[\n",
      "    {\n",
      "        \"category\": \"Smartphones and Accessories\",\n",
      "        \"products\": [\"SmartX ProPhone\"]\n",
      "    },\n",
      "    {\n",
      "        \"category\": \"Cameras and Camcorders\",\n",
      "        \"products\": [\"FotoSnap DSLR Camera\", \"FotoSnap Mirrorless Camera\", \"FotoSnap Instant Camera\"]\n",
      "    },\n",
      "    {\n",
      "        \"category\": \"Televisions and Home Theater Systems\",\n",
      "        \"products\": [\"CineView 4K TV\", \"SoundMax Home Theater\", \"CineView 8K TV\", \"SoundMax Soundbar\", \"CineView OLED TV\"]\n",
      "    }\n",
      "]\n"
     ]
    }
   ],
   "source": [
    "delimiter = \"====\"\n",
    "system_message = f\"\"\"\n",
    "您将获得客户服务查询。\n",
    "客户服务查询将使用{delimiter}字符作为分隔符。\n",
    "请仅输出一个可解析的Python列表，列表每一个元素是一个JSON对象，每个对象具有以下格式：\n",
    "'category': <包括以下几个类别：Computers and Laptops、Smartphones and Accessories、Televisions and Home Theater Systems、Gaming Consoles and Accessories、Audio Equipment、Cameras and Camcorders>,\n",
    "以及\n",
    "'products': <必须是下面的允许产品列表中找到的产品列表>\n",
    "\n",
    "类别和产品必须在客户服务查询中找到。\n",
    "如果提到了某个产品，它必须与允许产品列表中的正确类别关联。\n",
    "如果未找到任何产品或类别，则输出一个空列表。\n",
    "除了列表外，不要输出其他任何信息！\n",
    "\n",
    "允许的产品：\n",
    "\n",
    "Computers and Laptops category:\n",
    "TechPro Ultrabook\n",
    "BlueWave Gaming Laptop\n",
    "PowerLite Convertible\n",
    "TechPro Desktop\n",
    "BlueWave Chromebook\n",
    "\n",
    "Smartphones and Accessories category:\n",
    "SmartX ProPhone\n",
    "MobiTech PowerCase\n",
    "SmartX MiniPhone\n",
    "MobiTech Wireless Charger\n",
    "SmartX EarBuds\n",
    "\n",
    "Televisions and Home Theater Systems category:\n",
    "CineView 4K TV\n",
    "SoundMax Home Theater\n",
    "CineView 8K TV\n",
    "SoundMax Soundbar\n",
    "CineView OLED TV\n",
    "\n",
    "Gaming Consoles and Accessories category:\n",
    "GameSphere X\n",
    "ProGamer Controller\n",
    "GameSphere Y\n",
    "ProGamer Racing Wheel\n",
    "GameSphere VR Headset\n",
    "\n",
    "Audio Equipment category:\n",
    "AudioPhonic Noise-Canceling Headphones\n",
    "WaveSound Bluetooth Speaker\n",
    "AudioPhonic True Wireless Earbuds\n",
    "WaveSound Soundbar\n",
    "AudioPhonic Turntable\n",
    "\n",
    "Cameras and Camcorders category:\n",
    "FotoSnap DSLR Camera\n",
    "ActionCam 4K\n",
    "FotoSnap Mirrorless Camera\n",
    "ZoomMaster Camcorder\n",
    "FotoSnap Instant Camera\n",
    "    \n",
    "只输出对象列表，不包含其他内容。\n",
    "\"\"\"\n",
    "user_message = f\"\"\" \n",
    "请告诉我关于 smartx pro phone 和 the fotosnap camera 的信息。\n",
    "另外，请告诉我关于你们的tvs的情况。 \n",
    "\"\"\"\n",
    "messages =  [\n",
    "    {'role':'system', 'content': system_message},    \n",
    "    {'role':'user', 'content': f\"{delimiter}{user_message}{delimiter}\"}\n",
    "] \n",
    "\n",
    "category_and_product_response = get_completion_from_messages(messages)\n",
    "print(category_and_product_response)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "088874c2-0638-431a-85fd-e2e45fc0ec34",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "对不起，我现在有点问题，请尝试问另外一个问题\n"
     ]
    }
   ],
   "source": [
    "try: \n",
    "    if delimiter in response: \n",
    "        final_response = response.split(delimiter)[-1].strip()\n",
    "    else: \n",
    "        final_response = response.split(\":\")[-1].strip()\n",
    "except Exception as e: \n",
    "    final_response = \"对不起，我现在有点问题，请尝试问另外一个问题\"\n",
    "\n",
    "print(final_response)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "1e8eee00-c33e-4e7e-8385-2609f859b296",
   "metadata": {},
   "outputs": [],
   "source": [
    "import json \n",
    "with open(\"products.json\", \"r\") as file: \n",
    "    products = json.load(file) \n",
    "\n",
    "def getProductByName(name):\n",
    "    \"\"\"\n",
    "    根据产品名称获取产品\n",
    "\n",
    "    参数:\n",
    "    name: 产品名称\n",
    "    \"\"\"\n",
    "    return products.get(name, None) \n",
    "\n",
    "def getProductByCategory(category): \n",
    "    \"\"\"\n",
    "    根据类别获取产品\n",
    "\n",
    "    参数:\n",
    "    category: 产品类别\n",
    "    \"\"\"\n",
    "    return [ product for product in products.values() if product[\"category\"] == category]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "d0a5dcde-c6c0-45b3-b1a7-8ad758625a89",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'name': 'TechPro Ultrabook',\n",
       " 'category': 'Computers and Laptops',\n",
       " 'brand': 'TechPro',\n",
       " 'model_number': 'TP-UB100',\n",
       " 'warranty': '1 year',\n",
       " 'rating': 4.5,\n",
       " 'features': ['13.3-inch display',\n",
       "  '8GB RAM',\n",
       "  '256GB SSD',\n",
       "  'Intel Core i5 processor'],\n",
       " 'description': 'A sleek and lightweight ultrabook for everyday use.',\n",
       " 'price': 799.99}"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "getProductByName(\"TechPro Ultrabook\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "65396210-a091-4a54-88dc-31cd079fccb7",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[{'name': 'TechPro Ultrabook',\n",
       "  'category': 'Computers and Laptops',\n",
       "  'brand': 'TechPro',\n",
       "  'model_number': 'TP-UB100',\n",
       "  'warranty': '1 year',\n",
       "  'rating': 4.5,\n",
       "  'features': ['13.3-inch display',\n",
       "   '8GB RAM',\n",
       "   '256GB SSD',\n",
       "   'Intel Core i5 processor'],\n",
       "  'description': 'A sleek and lightweight ultrabook for everyday use.',\n",
       "  'price': 799.99},\n",
       " {'name': 'BlueWave Gaming Laptop',\n",
       "  'category': 'Computers and Laptops',\n",
       "  'brand': 'BlueWave',\n",
       "  'model_number': 'BW-GL200',\n",
       "  'warranty': '2 years',\n",
       "  'rating': 4.7,\n",
       "  'features': ['15.6-inch display',\n",
       "   '16GB RAM',\n",
       "   '512GB SSD',\n",
       "   'NVIDIA GeForce RTX 3060'],\n",
       "  'description': 'A high-performance gaming laptop for an immersive experience.',\n",
       "  'price': 1199.99},\n",
       " {'name': 'PowerLite Convertible',\n",
       "  'category': 'Computers and Laptops',\n",
       "  'brand': 'PowerLite',\n",
       "  'model_number': 'PL-CV300',\n",
       "  'warranty': '1 year',\n",
       "  'rating': 4.3,\n",
       "  'features': ['14-inch touchscreen',\n",
       "   '8GB RAM',\n",
       "   '256GB SSD',\n",
       "   '360-degree hinge'],\n",
       "  'description': 'A versatile convertible laptop with a responsive touchscreen.',\n",
       "  'price': 699.99},\n",
       " {'name': 'TechPro Desktop',\n",
       "  'category': 'Computers and Laptops',\n",
       "  'brand': 'TechPro',\n",
       "  'model_number': 'TP-DT500',\n",
       "  'warranty': '1 year',\n",
       "  'rating': 4.4,\n",
       "  'features': ['Intel Core i7 processor',\n",
       "   '16GB RAM',\n",
       "   '1TB HDD',\n",
       "   'NVIDIA GeForce GTX 1660'],\n",
       "  'description': 'A powerful desktop computer for work and play.',\n",
       "  'price': 999.99},\n",
       " {'name': 'BlueWave Chromebook',\n",
       "  'category': 'Computers and Laptops',\n",
       "  'brand': 'BlueWave',\n",
       "  'model_number': 'BW-CB100',\n",
       "  'warranty': '1 year',\n",
       "  'rating': 4.1,\n",
       "  'features': ['11.6-inch display', '4GB RAM', '32GB eMMC', 'Chrome OS'],\n",
       "  'description': 'A compact and affordable Chromebook for everyday tasks.',\n",
       "  'price': 249.99}]"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "getProductByCategory(\"Computers and Laptops\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "5b016039-8c0a-4665-93cd-84e36da52142",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[{'category': 'Smartphones and Accessories', 'products': ['SmartX ProPhone']}, {'category': 'Cameras and Camcorders', 'products': ['FotoSnap DSLR Camera', 'FotoSnap Mirrorless Camera', 'FotoSnap Instant Camera']}, {'category': 'Televisions and Home Theater Systems', 'products': ['CineView 4K TV', 'SoundMax Home Theater', 'CineView 8K TV', 'SoundMax Soundbar', 'CineView OLED TV']}]\n"
     ]
    }
   ],
   "source": [
    "def read_string_to_list(input_string):\n",
    "    \"\"\"\n",
    "    将输入的字符串转换为 Python 列表。\n",
    "\n",
    "    参数:\n",
    "    input_string: 输入的字符串，应为有效的 JSON 格式。\n",
    "\n",
    "    返回:\n",
    "    list 或 None: 如果输入字符串有效，则返回对应的 Python 列表，否则返回 None。\n",
    "    \"\"\"\n",
    "    if input_string is None: \n",
    "        return None\n",
    "    try: \n",
    "       # 将输入字符串中的单引号替换为双引号，以满足 JSON 格式的要求 \n",
    "        input_string = input_string.replace(\"'\", \"\\\"\")\n",
    "        data = json.loads(input_string)\n",
    "        return data \n",
    "    except json.JSONDecodeError: \n",
    "        print(\"Error: Invalid JSON string\")\n",
    "        return None\n",
    "\n",
    "category_and_product_list = read_string_to_list(category_and_product_response)\n",
    "print(category_and_product_list)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "24f9169e-cf96-465d-a1e2-627636ddcb2b",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{\n",
      "    \"name\": \"SmartX ProPhone\",\n",
      "    \"category\": \"Smartphones and Accessories\",\n",
      "    \"brand\": \"SmartX\",\n",
      "    \"model_number\": \"SX-PP10\",\n",
      "    \"warranty\": \"1 year\",\n",
      "    \"rating\": 4.6,\n",
      "    \"features\": [\n",
      "        \"6.1-inch display\",\n",
      "        \"128GB storage\",\n",
      "        \"12MP dual camera\",\n",
      "        \"5G\"\n",
      "    ],\n",
      "    \"description\": \"A powerful smartphone with advanced camera features.\",\n",
      "    \"price\": 899.99\n",
      "}\n",
      "{\n",
      "    \"name\": \"FotoSnap DSLR Camera\",\n",
      "    \"category\": \"Cameras and Camcorders\",\n",
      "    \"brand\": \"FotoSnap\",\n",
      "    \"model_number\": \"FS-DSLR200\",\n",
      "    \"warranty\": \"1 year\",\n",
      "    \"rating\": 4.7,\n",
      "    \"features\": [\n",
      "        \"24.2MP sensor\",\n",
      "        \"1080p video\",\n",
      "        \"3-inch LCD\",\n",
      "        \"Interchangeable lenses\"\n",
      "    ],\n",
      "    \"description\": \"Capture stunning photos and videos with this versatile DSLR camera.\",\n",
      "    \"price\": 599.99\n",
      "}\n",
      "{\n",
      "    \"name\": \"FotoSnap Mirrorless Camera\",\n",
      "    \"category\": \"Cameras and Camcorders\",\n",
      "    \"brand\": \"FotoSnap\",\n",
      "    \"model_number\": \"FS-ML100\",\n",
      "    \"warranty\": \"1 year\",\n",
      "    \"rating\": 4.6,\n",
      "    \"features\": [\n",
      "        \"20.1MP sensor\",\n",
      "        \"4K video\",\n",
      "        \"3-inch touchscreen\",\n",
      "        \"Interchangeable lenses\"\n",
      "    ],\n",
      "    \"description\": \"A compact and lightweight mirrorless camera with advanced features.\",\n",
      "    \"price\": 799.99\n",
      "}\n",
      "{\n",
      "    \"name\": \"FotoSnap Instant Camera\",\n",
      "    \"category\": \"Cameras and Camcorders\",\n",
      "    \"brand\": \"FotoSnap\",\n",
      "    \"model_number\": \"FS-IC10\",\n",
      "    \"warranty\": \"1 year\",\n",
      "    \"rating\": 4.1,\n",
      "    \"features\": [\n",
      "        \"Instant prints\",\n",
      "        \"Built-in flash\",\n",
      "        \"Selfie mirror\",\n",
      "        \"Battery-powered\"\n",
      "    ],\n",
      "    \"description\": \"Create instant memories with this fun and portable instant camera.\",\n",
      "    \"price\": 69.99\n",
      "}\n",
      "{\n",
      "    \"name\": \"CineView 4K TV\",\n",
      "    \"category\": \"Televisions and Home Theater Systems\",\n",
      "    \"brand\": \"CineView\",\n",
      "    \"model_number\": \"CV-4K55\",\n",
      "    \"warranty\": \"2 years\",\n",
      "    \"rating\": 4.8,\n",
      "    \"features\": [\n",
      "        \"55-inch display\",\n",
      "        \"4K resolution\",\n",
      "        \"HDR\",\n",
      "        \"Smart TV\"\n",
      "    ],\n",
      "    \"description\": \"A stunning 4K TV with vibrant colors and smart features.\",\n",
      "    \"price\": 599.99\n",
      "}\n",
      "{\n",
      "    \"name\": \"SoundMax Home Theater\",\n",
      "    \"category\": \"Televisions and Home Theater Systems\",\n",
      "    \"brand\": \"SoundMax\",\n",
      "    \"model_number\": \"SM-HT100\",\n",
      "    \"warranty\": \"1 year\",\n",
      "    \"rating\": 4.4,\n",
      "    \"features\": [\n",
      "        \"5.1 channel\",\n",
      "        \"1000W output\",\n",
      "        \"Wireless subwoofer\",\n",
      "        \"Bluetooth\"\n",
      "    ],\n",
      "    \"description\": \"A powerful home theater system for an immersive audio experience.\",\n",
      "    \"price\": 399.99\n",
      "}\n",
      "{\n",
      "    \"name\": \"CineView 8K TV\",\n",
      "    \"category\": \"Televisions and Home Theater Systems\",\n",
      "    \"brand\": \"CineView\",\n",
      "    \"model_number\": \"CV-8K65\",\n",
      "    \"warranty\": \"2 years\",\n",
      "    \"rating\": 4.9,\n",
      "    \"features\": [\n",
      "        \"65-inch display\",\n",
      "        \"8K resolution\",\n",
      "        \"HDR\",\n",
      "        \"Smart TV\"\n",
      "    ],\n",
      "    \"description\": \"Experience the future of television with this stunning 8K TV.\",\n",
      "    \"price\": 2999.99\n",
      "}\n",
      "{\n",
      "    \"name\": \"SoundMax Soundbar\",\n",
      "    \"category\": \"Televisions and Home Theater Systems\",\n",
      "    \"brand\": \"SoundMax\",\n",
      "    \"model_number\": \"SM-SB50\",\n",
      "    \"warranty\": \"1 year\",\n",
      "    \"rating\": 4.3,\n",
      "    \"features\": [\n",
      "        \"2.1 channel\",\n",
      "        \"300W output\",\n",
      "        \"Wireless subwoofer\",\n",
      "        \"Bluetooth\"\n",
      "    ],\n",
      "    \"description\": \"Upgrade your TV's audio with this sleek and powerful soundbar.\",\n",
      "    \"price\": 199.99\n",
      "}\n",
      "{\n",
      "    \"name\": \"CineView OLED TV\",\n",
      "    \"category\": \"Televisions and Home Theater Systems\",\n",
      "    \"brand\": \"CineView\",\n",
      "    \"model_number\": \"CV-OLED55\",\n",
      "    \"warranty\": \"2 years\",\n",
      "    \"rating\": 4.7,\n",
      "    \"features\": [\n",
      "        \"55-inch display\",\n",
      "        \"4K resolution\",\n",
      "        \"HDR\",\n",
      "        \"Smart TV\"\n",
      "    ],\n",
      "    \"description\": \"Experience true blacks and vibrant colors with this OLED TV.\",\n",
      "    \"price\": 1499.99\n",
      "}\n",
      "\n"
     ]
    }
   ],
   "source": [
    "def generate_output_string(data_list):\n",
    "    \"\"\"\n",
    "    根据输入的数据列表生成包含产品或类别信息的字符串。\n",
    "\n",
    "    参数:\n",
    "    data_list: 包含字典的列表，每个字典都应包含 \"products\" 或 \"category\" 的键。\n",
    "\n",
    "    返回:\n",
    "    output_string: 包含产品或类别信息的字符串。\n",
    "    \"\"\"\n",
    "    output_string=\"\" \n",
    "    if data_list is None: \n",
    "        return output_string \n",
    "    for data in data_list: \n",
    "        try: \n",
    "            if \"products\" in data and data[\"products\"]: \n",
    "                products_list = data[\"products\"]\n",
    "                for product_name in products_list: \n",
    "                    product = getProductByName(product_name)\n",
    "                    if product: \n",
    "                        output_string += json.dumps(product, indent=4, ensure_ascii=False) + \"\\n\" \n",
    "                    else:\n",
    "                        print(f\"Error: Product '{product_name}' not found\" )\n",
    "            elif \"category\" in data: \n",
    "                category_name = data[\"categroy\"] \n",
    "                category_products = getProductByCategory(category_name)\n",
    "                for product in category_products: \n",
    "                    output_string += json.dumps(product, indent=4, ensure_ascii=False) + \"\\n\"\n",
    "            else: \n",
    "                print(\"Error: Invalid object format\")\n",
    "        except Exception as e: \n",
    "            print(f\"Error: {e}\" )\n",
    "    return output_string\n",
    "\n",
    "product_infomation_for_user_message = generate_output_string(category_and_product_list)\n",
    "print(product_infomation_for_user_message)           "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "a2531364-8db7-4854-ac22-9902b6ad625d",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{\n",
      "    \"name\": \"SoundMax Wireless Headphones\",\n",
      "    \"category\": \"Televisions and Home Theater Systems\",\n",
      "    \"brand\": \"SoundMax\",\n",
      "    \"model_number\": \"SM-WH100\",\n",
      "    \"warranty\": \"1 year\",\n",
      "    \"rating\": 4.5,\n",
      "    \"features\":\n",
      "        [\n",
      "        \"Noise cancellation\",\n",
      "        \"Bluetooth\",\n",
      "        \"10-hour battery life\"\n",
      "    ],\n",
      "    \"description\": \"Enjoy immersive audio with these wireless headphones.\",\n",
      "    \"price\": 149.99\n",
      "}\n",
      "\n",
      "SmartX Pro Phone是一款强大智能手机，6.1英寸显示屏、128GB存储、1200万像素双摄、支持5G，售价899.99美元，保修1年，评分4.6 。Fotosnap有不同类型相机，功能价格各有不同。我们的电视品牌主要是CineView，有4K、8K、OLED等不同型号，功能和价格差异较大。请问您更关注哪类产品的哪方面细节呢，比如价格、功能？  \n"
     ]
    }
   ],
   "source": [
    "system_message = f\"\"\"\n",
    "您是一家大型电子商店的客服助理。\n",
    "请以友好和乐于助人的口吻回答问题，并尽量简洁明了。\n",
    "请确保向用户提出相关的后续问题。\n",
    "\"\"\"\n",
    "user_message_1 = f\"\"\" \n",
    "请告诉我关于  smartx pro phone 和 the fotosnap camera 的信息。\n",
    "另外， 请告诉我关于你们的tvs的情况。 \n",
    "\"\"\" \n",
    "\n",
    "messages =  [{'role':'system','content': system_message},\n",
    "             {'role':'user','content': user_message_1},  \n",
    "             {'role':'assistant',\n",
    "              'content': f\"\"\"相关产品信息:\\n\\\n",
    "              {product_infomation_for_user_message}\"\"\"}]\n",
    "\n",
    "final_response = get_completion_from_messages(messages)\n",
    "print(final_response)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "284ec864-3f2a-4c1e-99dc-7d09279f1c09",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.21"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
